﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
using System.Data.SqlClient;

namespace FiltroMultiploGridview
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        private static void RemoveDuplicados(DropDownList ddl)
        {
            for (int i = 0; i < ddl.Items.Count; i++)
            {
                ddl.SelectedIndex = i;
                string str = ddl.SelectedItem.Value;
                for (int counter = i + 1; counter < ddl.Items.Count; counter++)
                {
                    ddl.SelectedIndex = counter;
                    string compareStr = ddl.SelectedItem.Value;
                    if (str == compareStr || System.String.IsNullOrEmpty(compareStr) )
                    {
                        ddl.Items.RemoveAt(counter);
                        counter = counter - 1;
                    }
                }
            }
            ddl.SelectedIndex = -1;
        }

        protected void gvProdutos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //artigo: http://www.aspdotnetcodes.com/Asp.Net_GridView_Filter.aspx
            if (e.Row.RowType == DataControlRowType.Header)
            {
                DropDownList ddlNomes = (DropDownList)e.Row.FindControl("ddlNomes");
                string produtoSelecionado = Request.Form[ddlNomes.UniqueID];
                RemoveDuplicados(ddlNomes);
                
                var organizadorFilterExpression = new OrganizaFilterExpression();

                if (produtoSelecionado != "Todos")
                {
                        organizadorFilterExpression.AdicionaParametro("Name", produtoSelecionado);
                }

                //seleciona novamente o item que estava selecionado no dropdownlist
                foreach (ListItem dItem in ddlNomes.Items)
                {
                    if (dItem.Value == produtoSelecionado)
                    {
                        dItem.Selected = true;
                    }
                }

                DropDownList ddlCores = (DropDownList)e.Row.FindControl("ddlCores");
                string corSelecionada = Request.Form[ddlCores.UniqueID];
                RemoveDuplicados(ddlCores);

                if (corSelecionada != "Tudo")
                {
                    organizadorFilterExpression.AdicionaParametro("Color", corSelecionada);
                }

                //seleciona novamente o item que estava selecionado no dropdownlist
                foreach (ListItem dItem in ddlCores.Items)
                {
                    if (dItem.Value == corSelecionada)
                    {
                        dItem.Selected = true;
                    }
                }

                string fex = organizadorFilterExpression.ToString();
                Debug.WriteLine("FilterExpression gerada: " + fex);
                sqlProdutos.FilterExpression = fex;

            }
        }

        protected void gvProdutos_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                DropDownList ddlItens = new DropDownList();
                ddlItens.ID = "ddlPreco";
                ddlItens.DataSource = sqlProdutos;
                ddlItens.DataTextField = "ListPrice";
                ddlItens.DataValueField = "ListPrice";
                ddlItens.AutoPostBack = true;
                ddlItens.DataBind();
                e.Row.Cells[4].Controls.Add(ddlItens);
            }
        }

    }
}